/*************************************************************************************
 * Nombre del archivo: Token.java
 * Universidad del Valle de Guatemala
 * Curso: Diseño de Lenguajes de Programación
 * @author martin
 *          Martín Guzmán 08041
 * Fecha: Mayo de 2010
 * Descripción: Contiene los parámetros de un token incluyendo su nombre, tipo y valor
*************************************************************************************/

public class Token {

    public int kind = -1;     //Tipo de Token
    public String name = "";  //Contiene el nombre de cada token -> ident, digit, etc..
    public String value = ""; //Valor del Token
    public int pos = -1;      //Posición del Token
    public int col = -1;      //Columna del Token
    public int line = -1;     //Línea del Token


    /***********************************************
    * Método: Token
    * Uso: Constructor
    ***********************************************/
    public Token(){
        this.kind = -1;
        this.name = "";
        this.value = "";
    }

    /***********************************************
    * Método: Scanner1
    * Uso: Constructor
    * @param kind contiene el tipo de token
    * @parm value contiene el valor (cadena encontrada)
    ***********************************************/
    public Token(int kind, String name, String value){
        this.kind = kind;
        this.name = name;
        this.value = value;
    }

    /***********************************************
    * Método: getKind()
    * Uso: Para obtener el tipo del token
    * @return el tipo de token
    ***********************************************/
    public int getKind() {
        return kind;
    }

    /***********************************************
    * Método: setKind()
    * Uso: Cambiar el valor de kind
    * @param kind
    ***********************************************/
    public void setKind(int Kind) {
        this.kind = Kind;
    }

    /***********************************************
    * Método: getValue()
    * Uso: Para obtener el valor del token
    * @return el valor del token
    ***********************************************/
    public String getValue() {
        return value;
    }

    /***********************************************
    * Método: setValue()
    * Uso: Cambiar el valor de value
    * @param value
    ***********************************************/
    public void setValue(String Value) {
        this.value = Value;
    }

    /***********************************************
    * Método: toString()
    * Uso: Imprimir el contenido de un token
    * @return String con la cadena
    ***********************************************/
    public String toString(){
        return "<"+this.name+", "+this.value+">";
    }

    /***********************************************
    * Método: clone
    * Uso: Clona este token
    * @return una copia del token
    ***********************************************/
    public Token clone(){
	return (new Token(this.kind,this.name,this.value));
    }
}
